<!DOCTYPE html>
<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html class=""> <!--<![endif]-->
<head>
    <title>Grails - Plugin - Shiro User Interface</title>

    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    <meta name="robots" content="NOODP">
    <meta name="Description" content="Grails is a high-productivity web framework based on the Groovy language that embraces the coding by convention paradigm, but is designed specifically for the Java platform.">	

    
    <link href="/static/mnqzhxEka8fg6Hu3z6ra5TBwnHBXIJDpqN0Mz2O4JZw.ico" rel="shortcut icon" />
    <script src="/static/olHYw9s4sRWKtAqM0Gycx7M0Zi61vStT4U3dxxe4zR.js" type="text/javascript" ></script>
<script src="/static/SMqIhZQnW0hVcv1ddCsxzQAJ71v52rNDzHCwyhS4NHM.js" type="text/javascript" ></script>
<script src="/static/zJHP5VyHm7tL27vEElZXfjJUO9IWNUqhzUqJ7jXFex1.js" type="text/javascript" ></script>
<script src="/static/PXn7laUPGOsQB6caqG8xV2fUb6XyaPMIkosH6okdOTD.js" type="text/javascript" ></script>
<script src="/static/nIDw1ClETEFYILk6AqTiR5bBWvrsl4irOGodj5WxsXr.js" type="text/javascript" ></script>
<link href="/static/lnLhuvgzxCZaUwFqFGrwOCnzFQoTAPmAdvqwKmkYq5t.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/dg9ioT1XCL1ZJ0fVbSfDWQXU6ASGLxG6QzSrJVXaVgK.js" type="text/javascript" ></script>
<link href="/static/Opg3Oryy8VpgNOpsxQxelNsG6mWJ5MaPX6gZBB8NMYZ.css" type="text/css" rel="stylesheet" media="screen, projection" />
<link href="/static/fvo8UjifhHvTL121bHsTKOhZeKDh9S4bcsV6XNkOHHv.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/YcSNCmz8BrISJAxiTyEkdATtlGLFI99Wxo2Pa9L13Kl.js" type="text/javascript" ></script>
<script src="/static/YHG3gHOpS8TE7QVrjOuyX6uUlqsYPwB9kQrSFEsxD7a.js" type="text/javascript" ></script>
<link href="/static/o4wHGtUOHXBJuPyrsvYpzLuyUxHUfStG072sW4bJVOl.css" type="text/css" rel="stylesheet" media="screen, projection" />
<link href="/static/TOJMZzFaJFbeJVXl1XwpqyLonNPdeGS5a8VONNFESsp.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/BShzjOAQ87uh6fYS63tFPd3kbCSl7rqPY1YehfqiRT.js" type="text/javascript" ></script>
<link href="/static/kWsg6T4w4nTwYkIfUHB7IHizfKyfnvLTxfu5eCnirze.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/M0DhE7Mwi8RtwdRel3GBRmZA7IygSwum6SVMAJDtBFW.js" type="text/javascript" ></script>
<script src="/static/PK5vLlWR0gVPQOTahgPgD5qKjpbazdrmuI6aFfhEE9.js" type="text/javascript" ></script>
<link href="/static/HmYhiMCDWqs72fUqsJyQx0ssScRkoSFLrSIG6LyBFJK.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/O3ToRxl9lcGuBkdVGKkTvEHpRD465kZYk2Hmu0dpgex.js" type="text/javascript" ></script>
<link href="/static/oJi67HlPQg1wH3AWLXOw37JOhZ4DvaObfmcQjDzaC5Q.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/A9S42WFGksTUJWihLBxBNwwMHWyMp5ti18HnZqmgDmT.js" type="text/javascript" ></script>

<link href="/static/bqYjrlbrS9BWb7TGvdlu6qxiUY1we21Ex38KeByXnEb.css" type="text/css" rel="stylesheet" media="screen, projection" />
<link href="/static/CEOe0gYZxFeVl9Ia3plLhwZsqwIcL1qzKT4MU1oQnun.css" type="text/css" rel="stylesheet" media="screen, projection" />
<script src="/static/Usluy7PoBn83Rbmazshp3eeoE6ViaO3vGgzUdMZdrRA.js" type="text/javascript" ></script>
<link href="/static/qOHdlDQShC0snzJ3RY1d8K0tmb410w7KZ94t6rSKO6p.css" type="text/css" rel="stylesheet" media="screen, projection" />
<link href="/static/zGiUdmUmL31K5Uirie6Jp1ERQc2U9tjc2OzS22SSDEx.css" type="text/css" rel="stylesheet" media="screen, projection" />




    
    
    
    
        
    
    
    
    

    

    
    
    

    
    <meta name="layout" content="pluginDetails">


    
    

    <style type="text/css" media="screen">
.yui-navset-bottom .yui-nav li a em {
    display:inline;
}
.yui-navset .yui-nav li a em, .yui-navset-top .yui-nav li a em, .yui-navset-bottom .yui-nav li a em {
    display:inline;
}
    </style>


    


</head>
<body onload="addJsClass();">
    
    <div id="header" align="center">
        <div id="springSourceBar">
	<div id="grailsLogo">
		<a href="/"><img src="/static/cXmUZIAv28XIiNgkRiz4RRl21TsGZ5HoGpZw1UITNyV.png" border="0" /></a>			
	</div>

	<div id="springSourceLogo">
		<a href="http://www.springsource.com/"><img src="/static/xATgakdqUqjehM4CPEgEyIEVaa7xHY09sonkDDDBPA5.png" border="0" /></a>			
	</div>
	<div id="searchbar">
		<form action="/search" method="get" name="searchForm" id="searchForm" >
		    <input
		 		onblur="this.style.color = '#CDE5C4';" 
				onfocus="this.style.color = '#48802C';this.value='';"
				type="text" accessKey="s" name="q" value=""/>		
		</form>		
	</div>
</div>

        <div class="mainMenuBarWrapper">
            <ul id="mainMenuBar">
	
    <li><a href="http://www.springsource.com/products/grails">Products</a></li>
    <li><a href="http://www.springsource.com/groovy-grails-consulting">Services</a></li>
    <li><a href="http://www.springsource.com/training/grv001">Training</a></li>
    <li><a href="/Testimonials">Case Studies</a></li>
    <li><a href="/Community">Community</a></li>
    <li><a href="/Download">Downloads</a></li>
    <li><a href="/plugins">Plugins</a> </li>
    <li><a href="/Documentation">Documentation</a></li>
</ul><!-- mainMenuBar -->

        </div>
    </div>

    <div id="contentWrapper" align="center">
        <div id="contentInnerWrapper">
            <div id="contentCenter" >
                
    

    <div id="contentPane">

	<div id="pluginBigBox">
            
		
            <div id="pluginBgTop"></div>
            <div id="pluginBox">
                <div id="pluginDetailWrapper">

                    
    <div id="pluginDetailsBox">
        <div id="pluginDetailsTop"></div>
        <div id="pluginDetailsContainer">
            
            
            
        <div class="null">
            <div id="loginDialog">
                <div class="hd">Login required</div>
                <div class="bd">
                    
                <div id='loginFormDiv'></div>
            
                </div>
            </div>
        </div>
        <script>
            function init_dlg_loginDialog() {
                // Instantiate the Dialog
                GRAILSUI.loginDialog = new YAHOO.widget.Dialog("loginDialog",
                { 'modal': true,
'fixedcenter': true,
'visible': false,
'params': [],
'constraintoviewport': true,
'buttons': [{'text': 'OK',
handler: function() {this.cancel();},
'isDefault': true}] });
                GRAILSUI.loginDialog.render(document.body);
                
        
            }
            YAHOO.util.Event.onDOMReady(init_dlg_loginDialog);
        </script>

            <div id="downloadBox">
                <a href="https://svn.codehaus.org/grails-plugins/grails-shiro-ui/tags/LATEST_RELEASE/grails-shiro-ui-1.0-beta4.zip"><img src="/static/OPPwb7Wv8IXVwcl47IOpipg9CwS65FWrxQSXQVVmAVh.png" alt="Download" border="0" /></a>
            </div>

            <h1 id="pluginBoxTitle">Shiro User Interface</h1>

            <div class="ratingBox">
                
                
                    <div id="ratingDisplay">
                        
            <table class="ratingDisplay">
                <tr>
            <td><div class="star on"><a href="/login?originalURI=%2Fplugin%2Fshiro-ui" style="width:0%"></a></div></td><td><div class="star on"><a href="/login?originalURI=%2Fplugin%2Fshiro-ui" style="width:0%"></a></div></td><td><div class="star on"><a href="/login?originalURI=%2Fplugin%2Fshiro-ui" style="width:0%"></a></div></td><td><div class="star on"><a href="/login?originalURI=%2Fplugin%2Fshiro-ui" style="width:0%"></a></div></td><td><div class="star on"><a href="/login?originalURI=%2Fplugin%2Fshiro-ui" style="width:0%"></a></div></td>
                    <td>(0)</td>
                </tr>
            </table>
                                                                                                        
                    </div>
                
            </div>
            <div class="pluginDetail">
                
                <table>
                    <tr>
                        <th>Author(s)</th>
                        <td>Yellowsnow</td>
                    </tr>
                    <tr>
                        <th>Current Release</th>
                        <td>1.0-beta4&nbsp;&nbsp;&nbsp;(6 months ago)</td>
                    </tr>
                    <tr>
                        <th>Grails Version</th>
                        <td>1.3.7</td>
                    </tr>
                    
                    
                    <tr>
                        <th>Tags</th>
                        <td class='tags'>
                            <span id='pluginTags'>
                                

    <span class="tag"><a href="/plugins/tag/frontend">frontend</a>&nbsp;
    
        

        
        
        
        
            <img id="remove_frontend_tag_from_906" src="/static/ZkvUw6b7PrI8Pma3KmlIB2A1CSEDHmmf0sJQq3h9vSf.png"/>
            <script>
                YAHOO.util.Event.onDOMReady(function() {
                    // on show, put the dialog in the right place
                    YAHOO.util.Event.on("remove_frontend_tag_from_906", 'click', function() {
                        window.location = "/login?originalURI=%2Fplugin%2Fshiro-ui";
                    });
                });
            </script>
        
    
    </span>

    <span class="tag"><a href="/plugins/tag/security">security</a>&nbsp;
    
        

        
        
        
        
            <img id="remove_security_tag_from_906" src="/static/ZkvUw6b7PrI8Pma3KmlIB2A1CSEDHmmf0sJQq3h9vSf.png"/>
            <script>
                YAHOO.util.Event.onDOMReady(function() {
                    // on show, put the dialog in the right place
                    YAHOO.util.Event.on("remove_security_tag_from_906", 'click', function() {
                        window.location = "/login?originalURI=%2Fplugin%2Fshiro-ui";
                    });
                });
            </script>
        
    
    </span>

    <span class="tag"><a href="/plugins/tag/ui">ui</a>&nbsp;
    
        

        
        
        
        
            <img id="remove_ui_tag_from_906" src="/static/ZkvUw6b7PrI8Pma3KmlIB2A1CSEDHmmf0sJQq3h9vSf.png"/>
            <script>
                YAHOO.util.Event.onDOMReady(function() {
                    // on show, put the dialog in the right place
                    YAHOO.util.Event.on("remove_ui_tag_from_906", 'click', function() {
                        window.location = "/login?originalURI=%2Fplugin%2Fshiro-ui";
                    });
                });
            </script>
        
    
    </span>


                            </span>
                            <span id='addTagTrigger'><img src="/static/V6lM9VtbWbu4xVIRmbEy9b9fLKlnbnjkdqYpgr9UUla.png" /></span>
                        </td>
                    </tr>
                    <tr>
                        <th>Dependency</th>
                        <td><pre>compile ":shiro-ui:1.0-beta4"</pre></td>
                    </tr>
                    
                </table>
            </div>
            <ul class="links">
                
<li><a href="https://github.com/yellowsnow/grails-shiro-ui/"> <img src="/static/trqEoCdSJ5w3ZFEEbpY0HWoHsc8unKTBKpdx8nJJdjU.png" border="0" />&nbsp;Source</a></li>


<li><a href="http://grails.org/plugin/shiro-ui"> <img src="/static/p0JQdku750CsGnqCBsMCxTgbSRcQNFWPoc1ysZ5LFuf.png" border="0" />&nbsp;Docs</a></li>


  <li><a href="https://github.com/yellowsnow/grails-shiro-ui/issues"><img src="/static/IIi3GU4zjZntKH4h6mwqDnpGWcB6zCNQyt6r3UowNMO.png" border="0" />&nbsp;Issues</a></li>


                <li>
                    <a href="/plugin/edit/906">
                        <img src="/static/drgakn823IcL4KeSlqigXNEYTBqSs0AKbVKJQH1z1yl.png" border="0" />&nbsp;Edit Plugin
                    </a>
                </li>
            </ul>
        </div>

        <div class="description">
            A basic Shiro User Interface
        </div>
        
    </div>

    
</div>



    
    
    
    
        <script>
            YAHOO.util.Event.onDOMReady(function() {
                // on show, put the dialog in the right place
                YAHOO.util.Event.on('addTagTrigger', 'click', function() {
                    window.location = "/login?originalURI=%2Fplugin%2Fshiro-ui";
                });
                // also hang up rating click if not logged in, redirect to login page with originalURI of this page
                // for redirect
                YAHOO.util.Event.on('ratingdiv', 'click', function(e) {
                    YAHOO.util.Event.stopEvent(e);
                    window.location = "/login?originalURI=%2Fplugin%2Fshiro-ui";
                });
            });
        </script>
    

    <div id="pluginContent">
        
            
        <div id="tabView_gui_82423c980da3cefb7555b1e8329365a7" class="yui-navset">
            <div class="tabOuter">
                <div class="tabInner">
                    <ul class="yui-nav">
                        <li class='  '><a href="#installationTab"><span class="tabLeft"></span><em>Installation</em><span class="tabRight"></span></a></li>

<li class='selected  '><a href="#descriptionTab"><span class="tabLeft"></span><em>Description</em><span class="tabRight"></span></a></li>

<li class='  '><a href="#faqTab"><span class="tabLeft"></span><em>Faq</em><span class="tabRight"></span></a></li>

<li class='  '><a href="#screenshotsTab"><span class="tabLeft"></span><em>Screenshots</em><span class="tabRight"></span></a></li>

                    </ul>
                </div><!-- end #tabInner -->
            </div><!-- end #tabOuter -->
            <div class="yui-content">
                <div id="installationTab">
                        



<div id="wikiLastUpdated">Last updated by walayni 6 months ago</div>
<div id="viewLinks" class="wikiLinks">
    

    <ul class="wikiActionMenu">
        
            <li>
                <a href="/plugin/plugin-shiro-ui-installation/editWikiPage/installationTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-installation/editWikiPage/installationTab', {success: function(o){hideCommentPost();YAHOO.util.Dom.get('installationTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="editWikiPage" id="plugin-shiro-ui-installation">
                    <img src="/static/drgakn823IcL4KeSlqigXNEYTBqSs0AKbVKJQH1z1yl.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                    <span>Edit</span>
                </a>
            </li>
        
        <li>
            <a href="/plugin/plugin-shiro-ui-installation/infoWikiPage/installationTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-installation/infoWikiPage/installationTab', {success: function(o){YAHOO.util.Dom.get('installationTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="infoWikiPage" id="plugin-shiro-ui-installation">
                <img src="/static/PnoLmQ9FQkQ1vYUqZ6BJ5yWRWKMaUJOz3Hzx68S9YBq.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                <span>View Info</span>
            </a>
        </li>
    </ul>
</div>






<div class="code"><pre>grails install&#45;plugin shiro&#45;ui</pre></div>
<script type="text/javascript">
   if(myYUI.get('message')!=null) {
        myYUI.fade('message', {delay:3});
   }
</script>

                    </div>

<div id="descriptionTab">
                        



<div id="wikiLastUpdated">Last updated by walayni 6 months ago</div>
<div id="viewLinks" class="wikiLinks">
    

    <ul class="wikiActionMenu">
        
            <li>
                <a href="/plugin/plugin-shiro-ui-description/editWikiPage/descriptionTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-description/editWikiPage/descriptionTab', {success: function(o){hideCommentPost();YAHOO.util.Dom.get('descriptionTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="editWikiPage" id="plugin-shiro-ui-description">
                    <img src="/static/drgakn823IcL4KeSlqigXNEYTBqSs0AKbVKJQH1z1yl.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                    <span>Edit</span>
                </a>
            </li>
        
        <li>
            <a href="/plugin/plugin-shiro-ui-description/infoWikiPage/descriptionTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-description/infoWikiPage/descriptionTab', {success: function(o){YAHOO.util.Dom.get('descriptionTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="infoWikiPage" id="plugin-shiro-ui-description">
                <img src="/static/PnoLmQ9FQkQ1vYUqZ6BJ5yWRWKMaUJOz3Hzx68S9YBq.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                <span>View Info</span>
            </a>
        </li>
    </ul>
</div>






This plugin tries to provide a basic user interface for shiro plugin. It depends on the excellent <a href="http://grails.org/plugin/shiro" class="pageLink">Apache shiro</a> and <a href="http://grails.org/plugin/mail" class="pageLink">Mail</a> plugins.<p class="paragraph"/><blockquote class="note">
 The ShiroDBRealm is used in this plugin, this assumes users, roles and permissions are stored in the database.
</blockquote><p class="paragraph"/><a name="Installation"></a><h1>Installation</h1>
 <div class="code"><pre>grails install&#45;plugin shiro&#45;ui</pre></div><p class="paragraph"/><a name="Feature summary"></a><h1>Feature summary</h1>
<ul class="star">
<li>User and Role management frontends with basic permission configuration : ${appName}/shiroUser/ and ${appName}/shiroRole/</li>
<li>Password recovery via email : ${appName}/auth/lostPassword</li>
<li>Password update : ${appName}/auth/updatePassword</li>
<li>User creation by priviliged user with temporary password sent by email (password update is requested on log on)</li>
</ul>During installation, all templates (controllers, domain classes and views) are directly copied to the project.<p class="paragraph"/><a name="Admin user creation"></a><h1>Admin user creation</h1><p class="paragraph"/>Admin user creation can be done in the Bootstrap :
<div class="code"><pre><span class="java&#45;keyword">import</span> org.apache.shiro.crypto.hash.Sha256Hash<p class="paragraph"/>class BootStrap &#123;<p class="paragraph"/>   def init = &#123; servletContext &#45;&#62;<p class="paragraph"/>      def adminRole = ShiroRole.findByName(<span class="java&#45;quote">"Administrator"</span>)<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(!adminRole)&#123;<p class="paragraph"/>         adminRole = <span class="java&#45;keyword">new</span> ShiroRole(name: 'Administrator')<p class="paragraph"/>         adminRole.addToPermissions(<span class="java&#45;quote">"&#42;:&#42;"</span>)<p class="paragraph"/>         adminRole.save()<p class="paragraph"/>      &#125;<p class="paragraph"/>      def admin = ShiroUser.findByUsername('admin')<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(!admin)&#123;<p class="paragraph"/>         admin = <span class="java&#45;keyword">new</span> ShiroUser(firstName:<span class="java&#45;quote">"Administator"</span>,lastName:<span class="java&#45;quote">"User"</span>,<p class="paragraph"/>            username: 'admin', passwordHash: <span class="java&#45;keyword">new</span> Sha256Hash(<span class="java&#45;quote">"changeit"</span>).toHex(),email:'someone@gmail.com')<p class="paragraph"/>         admin.save()<p class="paragraph"/>         adminRole.addToUsers(admin)<p class="paragraph"/>         adminRole.save()<p class="paragraph"/>
      &#125;<p class="paragraph"/>   &#125;<p class="paragraph"/>   def destroy = &#123;<p class="paragraph"/>   &#125;<p class="paragraph"/>&#125;</pre></div><p class="paragraph"/><a name="Plugin RoadMap"></a><h1>Plugin RoadMap</h1>
<ul class="star">
<li>Allow custom permissions such as "book:buy,sell:1,2"</li>
<li>External mail templates (now hardcoded in controller)</li>
<li>Script to manually install templates</li>
<li>User sign-up with admin approval</li>
<li>Better documentation</li>
</ul>
<script type="text/javascript">
   if(myYUI.get('message')!=null) {
        myYUI.fade('message', {delay:3});
   }
</script>

                    </div>

<div id="faqTab">
                        



<div id="wikiLastUpdated">Last updated by walayni 6 months ago</div>
<div id="viewLinks" class="wikiLinks">
    

    <ul class="wikiActionMenu">
        
            <li>
                <a href="/plugin/plugin-shiro-ui-faq/editWikiPage/faqTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-faq/editWikiPage/faqTab', {success: function(o){hideCommentPost();YAHOO.util.Dom.get('faqTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="editWikiPage" id="plugin-shiro-ui-faq">
                    <img src="/static/drgakn823IcL4KeSlqigXNEYTBqSs0AKbVKJQH1z1yl.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                    <span>Edit</span>
                </a>
            </li>
        
        <li>
            <a href="/plugin/plugin-shiro-ui-faq/infoWikiPage/faqTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-faq/infoWikiPage/faqTab', {success: function(o){YAHOO.util.Dom.get('faqTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="infoWikiPage" id="plugin-shiro-ui-faq">
                <img src="/static/PnoLmQ9FQkQ1vYUqZ6BJ5yWRWKMaUJOz3Hzx68S9YBq.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                <span>View Info</span>
            </a>
        </li>
    </ul>
</div>






<a name="Unable to connect with login message "Invalid username and/or password""></a><h1>Unable to connect with login message "Invalid username and/or password"</h1><p class="paragraph"/>Please check that an initial user is created (often in the BootStrap). More details in the "Admin user creation" in the description tab.<p class="paragraph"/><a name="Still unable to connect after copying the bootstrap code (with login message "Invalid username and/or password")"></a><h1>Still unable to connect after copying the bootstrap code (with login message "Invalid username and/or password")</h1><p class="paragraph"/>Please make sure the bootstrap code was pasted before grails start.
<script type="text/javascript">
   if(myYUI.get('message')!=null) {
        myYUI.fade('message', {delay:3});
   }
</script>

                    </div>

<div id="screenshotsTab">
                        



<div id="wikiLastUpdated">Last updated by walayni 6 months ago</div>
<div id="viewLinks" class="wikiLinks">
    

    <ul class="wikiActionMenu">
        
            <li>
                <a href="/plugin/plugin-shiro-ui-screenshots/editWikiPage/screenshotsTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-screenshots/editWikiPage/screenshotsTab', {success: function(o){hideCommentPost();YAHOO.util.Dom.get('screenshotsTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="editWikiPage" id="plugin-shiro-ui-screenshots">
                    <img src="/static/drgakn823IcL4KeSlqigXNEYTBqSs0AKbVKJQH1z1yl.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                    <span>Edit</span>
                </a>
            </li>
        
        <li>
            <a href="/plugin/plugin-shiro-ui-screenshots/infoWikiPage/screenshotsTab" onclick="YAHOO.util.Connect.asyncRequest('GET', '/plugin/plugin-shiro-ui-screenshots/infoWikiPage/screenshotsTab', {success: function(o){YAHOO.util.Dom.get('screenshotsTab').innerHTML = o.responseText;}, failure: function(o){}}, null);return false;" class="actionIcon" action="infoWikiPage" id="plugin-shiro-ui-screenshots">
                <img src="/static/PnoLmQ9FQkQ1vYUqZ6BJ5yWRWKMaUJOz3Hzx68S9YBq.png" border="0" width="15" height="15" alt="Icon Edit" class="inlineIcon" />
                <span>View Info</span>
            </a>
        </li>
    </ul>
</div>







<script type="text/javascript">
   if(myYUI.get('message')!=null) {
        myYUI.fade('message', {delay:3});
   }
</script>

                    </div>

            </div>
        </div>
        <script type="text/javascript">
            GRAILSUI.tabView_gui_82423c980da3cefb7555b1e8329365a7 = new YAHOO.widget.TabView('tabView_gui_82423c980da3cefb7555b1e8329365a7');
        </script>
                
    </div>


                    <div class="pluginBoxBottom"></div>
                    <div id="previewContainer" class="previewPane" style="display:none;">
    <div id="closePreview"><a href="#" onclick="hidePreview();"><img src="/static/hDJsm4ken9OT06aDDvH8zaXcH13K42QLdmmqCi3xnVK.png" class="inlineIcon" width="15" height="15" border="0" alt="Icon Cancel" /> Close</a></div>
    <div id="previewPane" style="margin:10px; "></div>
</div>
                </div>	
            </div>		
	</div>
    </div>


            </div>
        </div>
    </div>

    <div id="btmSectionGraphicsWrapper">
        <div id="mountainLeft"></div>
        <div id="knight"></div>
        <div id="mountainRight"></div>
        <div id="castle"></div>
    </div>

    <div id="footer">
    <div align="center">
        <div class="innerFooter">
            <a href="http://contegix.com/"><img src="/static/kyk1IIgLbhsHB7QxrDRoVw08G2anuhJvcSDQnDAEyu9.jpg" alt="Hosted by Contegix" /></a>
            <a href="http://www.jfrog.org/">
                <img src="/static/tp9jPkd06Rppu6vxoTrYPMRYtbkXrLCGoLCIAGjMaBW.png" class="artifactory" alt="Artifactory logo" title="In association with JFrog" />
            </a>
	
            <a href="http://twitter.com/grailsframework"><div class="twitter"></div></a>
            <p>
            <a href="http://www.vmware.com/help/legal.html">Terms of Use</a> |
            <a href="http://www.vmware.com/help/privacy.html">Privacy</a>
            &nbsp;&nbsp;&nbsp;&nbsp;&copy; Copyright 2009-2011 SpringSource.<br/>All Rights Reserved.
            </p>
        </div><!-- innerFooter -->
    </div><!-- center -->
</div><!-- footer -->


    
    <script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try{
var pageTracker = _gat._getTracker("UA-2728886-12");
pageTracker._trackPageview();
} catch(err) {}
</script>

    
    <script type="text/javascript">
    var dmp = new diff_match_patch();

    function hideCommentPost() {
        YAHOO.util.Dom.addClass('postComment', 'hidden');
    }
    function showCommentPost() {
        YAHOO.util.Dom.removeClass('postComment', 'hidden');
    }

    function showDiff() {


        var text1 = myYUI.get("text1").innerHTML
        var text2 = myYUI.get("text2").innerHTML

        var d = dmp.diff_main(text1, text2);
        dmp.diff_cleanupSemantic(d);
        var ds = dmp.diff_prettyHtml(d);

        myYUI.get('diffOutputDiv').innerHTML = ds;

        myYUI.appear('diffOutputDiv')
    }

    function hidePreview() {
        myYUI.fade('previewContainer')
    }
    function showPreview() {
        myYUI.appear('previewContainer')
    }

function fadeMessages() {
    if(myYUI.get("errors")!=null) {
        myYUI.fade("errors", 5);
    }
    if(myYUI.get("message")!=null) {
        myYUI.fade("message", 10);
    }
}

function addJsClass() {
    var classes = document.body.className.split(" ");
	if (classes.length == 1 && classes[0] == "") {
		classes = ["js"];
	}
	else {
		classes.push("js");
	}
    document.body.className = classes.join(" ");
}
    </script>
</body>
</html>


